/**
 * pharma-business - 18 mars 2011
 * guillaume
 */
package org.bspv.pharma.business.rules.order;

import java.util.List;

import org.bspv.pharma.business.rules.AbstractLeafSpecification;
import org.bspv.pharma.manager.OrderManager;
import org.bspv.pharma.model.Order;
import org.bspv.pharma.tools.annotations.specification.RG;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * Règle de gestion
 * Pour être créée, aucune commande ne doit être dans l'état "En cours" pour la même pharmacie.
 * L'identifiant de la commande ne doit pas correspondre à un identifiant possible.
 * @author guillaume
 *
 */
@RG(id="RG_ORDER_CREATION_001")
public class OrderCreationRule extends AbstractLeafSpecification<Order> {

    /**
     * Service basique des commandes.
     */
    @Autowired
    private OrderManager orderManager;
    
    /**
     * @param orderManager the orderManager to set
     */
    public final void setOrderManager(OrderManager orderManager) {
        this.orderManager = orderManager;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public boolean isSatisfiedBy(Order candidate) {
        boolean res = true;
        res &= (candidate.getId() == null || candidate.getId() == 0L);
        List<Order> orders = orderManager.findCurrentOrders(candidate.getDrugstore());
        res &= (orders ==null || orders.isEmpty());
        return res;
    }
    
}
